<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Common\Api;

class CategoryApi {
	/**
	 * 获取分类信息并缓存分类
	 * 
	 * @param integer $id
	 *        	分类ID
	 * @param string $field
	 *        	要获取的字段名
	 * @return string 分类信息
	 */
	public static function get_category($id, $field = null) {
		static $list;
		
		/* 非法分类ID */
		if (empty ( $id ) || ! is_numeric ( $id )) {
			return '';
		}
		
		/* 读取缓存数据 */
		if (empty ( $list )) {
			$list = S ( 'sys_category_list' );
		}
		
		/* 获取分类名称 */
		if (! isset ( $list [$id] )) {
			$cate = M ( 'Category' )->find ( $id );
			if (! $cate || 1 != $cate ['status']) { // 不存在分类，或分类被禁用
				return '';
			}
			$list [$id] = $cate;
			S ( 'sys_category_list', $list ); // 更新缓存
		}
		return is_null ( $field ) ? $list [$id] : $list [$id] [$field];
	}
	
	/* 根据ID获取分类标识 */
	public static function get_category_name($id) {
		return get_category ( $id, 'name' );
	}
	
	/* 根据ID获取分类名称 */
	public static function get_category_title($id) {
		return get_category ( $id, 'title' );
	}
	
	/**
	 * 获取参数的所有父级分类
	 * 
	 * @param int $cid
	 *        	分类id
	 * @return array 参数分类和父类的信息集合
	 * @author huajie <banhuajie@163.com>
	 */
	public static function get_parent_category($cid) {
		if (empty ( $cid )) {
			return false;
		}
		$cates = M ( 'Category' )->where ( array (
				'status' => 1 
		) )->field ( 'id,title,pid' )->order ( 'sort' )->select ();
		$child = get_category ( $cid ); // 获取参数分类的信息
		$pid = $child ['pid'];
		$temp = array ();
		$res [] = $child;
		while ( true ) {
			foreach ( $cates as $key => $cate ) {
				if ($cate ['id'] == $pid) {
					$pid = $cate ['pid'];
					array_unshift ( $res, $cate ); // 将父分类插入到数组第一个元素前
				}
			}
			if ($pid == 0) {
				break;
			}
		}
		return $res;
	}
}